#ifndef HAL_PERIPH_CLK_H
#define HAL_PERIPH_CLK_H

/* 这个**“打开所有外设时钟”**的操作，在所有现代MCU（包括TI C2000、STM32、NXP、Infineon、瑞萨等）都极为常见，
 * 通常是通过寄存器或官方API使能特定外设的时钟和上电。
 * 迁移到hal层，建议设计为hal_periph_clk模块，专门管理所有外设时钟的开关，这样以后移植到任何MCU都很方便。*/

#include <stdint.h>
#include <stdbool.h>

// 枚举常用外设（建议用BITMASK/枚举/字符串/宏都可）
typedef enum hal_periph_tag{
    HAL_PERIPH_TIMER0,
    HAL_PERIPH_TIMER1,
    HAL_PERIPH_TIMER2,
    HAL_PERIPH_HRCAL,
    HAL_PERIPH_TBCLKSYNC,
    HAL_PERIPH_EPWM1,
    HAL_PERIPH_EPWM2,
    HAL_PERIPH_EPWM3,
    HAL_PERIPH_EPWM4,
    HAL_PERIPH_EPWM5,
    HAL_PERIPH_EPWM6,
    HAL_PERIPH_EPWM7,
    HAL_PERIPH_ECAP1,
    HAL_PERIPH_ECAP2,
    HAL_PERIPH_ECAP3,
    HAL_PERIPH_EQEP1,
    HAL_PERIPH_EQEP2,
    HAL_PERIPH_SCIA,
    HAL_PERIPH_SCIB,
    HAL_PERIPH_SCIC,
    HAL_PERIPH_SPIA,
    HAL_PERIPH_I2CA,
    HAL_PERIPH_I2CB,
    HAL_PERIPH_CANA,
    HAL_PERIPH_MCANA,
    HAL_PERIPH_ADCA,
    HAL_PERIPH_ADCC,
    HAL_PERIPH_CMPSS1,
    HAL_PERIPH_CMPSS2,
    HAL_PERIPH_CMPSS3,
    HAL_PERIPH_CMPSS4,
    HAL_PERIPH_LINA,
    HAL_PERIPH_PMBUSA,
    HAL_PERIPH_DCC0,
    HAL_PERIPH_EPG1,
    HAL_PERIPH_MAX // 标记总数
} hal_periph_t;

/**
 * @brief 使能指定外设的时钟
 * @param periph 外设枚举
 * @return true 成功，false 失败
 */
bool hal_periph_clk_enable(hal_periph_t periph);

/**
 * @brief 关闭指定外设的时钟
 * @param periph 外设枚举
 * @return true 成功，false 失败
 */
bool hal_periph_clk_disable(hal_periph_t periph);

/**
 * @brief 一次性使能所有常用外设时钟（等价于Device_enableAllPeripherals）
 */
void hal_periph_clk_enable_all(void);

#endif // HAL_PERIPH_CLK_H
